package Collection;

import java.util.ArrayList;
import java.util.Collection;
import java.util.Iterator;

public class IteratorDemo {
    public static void main(String[] args) {
        Collection<String> c =new ArrayList<>();
        c.add("one");
        c.add("#");
        c.add("two");
        c.add("#");
        c.add("three");
        c.add("#");
        c.add("four");
        c.add("#");
        c.add("five");
        System.out.println(c);//[one, #, two, #, three, #, four, #, five]
      //Collection是无序的集合，所以迭代输出的顺序和添加的顺序无关

        /*迭代器的常用方法
        * 1.boolean hasnext()-------问(必要操作)
        * 询问集合是否还有下一个元素可供迭代
        * 注意迭代器iterator起始位置在集合第一个元素之前
        *   无论调用了多少次hasNext()，迭代器的位置都不会改变
        * 2.E next() -------取(必要操作)
        *   迭代器向后移动一个位置并将该位置的元素取出
        * 3.void remove()--------删(删除并非必要操作)
        * 删除next()方法所获取的元素
        **/
        Iterator<String> it=c.iterator();//获取集合c的迭代器
        while (it.hasNext()){
            String str =it.next();
            System.out.println(str);
            if ("#".equals(str)){//防止str为空指针异常
                //c.remove(str);//迭代器遍历过程中不允许通过集合的方式来增删元素，否则会报异常
                //因为迭代器会看下一个元素，把前面位置删了，就会异常
                it.remove();//删除next()方法所获取的元素
            }
        }
        System.out.println(c);//[one, two, three, four, five] 注意改变的是c集合
        /*Iterator 是 Java 集合框架中用于遍历集合元素的工具。
        it.remove() 方法删除的是由最近一次 it.next() 方法返回的元素 。
        在迭代过程中，当调用 it.remove() 时，它会从底层集合（即 c ）中移除对应的元素。*/

    }
}
